import _ from 'lodash';
import moment from 'moment';

import * as types from '@/store/mutation-types';
import {
  sendgetRestaurant, sendgetClosed, sendgetTags, sendUpdateRest,
} from '@/request/Restaurant';
// import { get } from '@/common/utils';
// import router from '@/router';

export default {

  // 发送请求
  async getRestaurant({ commit }) {
    commit(types.SHOW_LOADING);
    try {
      const result = await sendgetRestaurant(); // 发送请求，返回的是整个用户信息的obj
      // console.log('result==>', result.list);

      // 因为原来的数据closed不全，不好在for里面使用，将数据整理一下，再使用
      const list = _.map(result.list, (item) => {
        const cloneItem = _.cloneDeep(item);
        if (item.closed) {
          cloneItem.isClosed = true;
        } else {
          cloneItem.isClosed = false;
        }
        return cloneItem;
      });

      // console.log('list===>', list);
      commit(types.SAVE_SHOP_LIST, list); // 放到vuex里面

      //* */ 设置拼音搜索渲染数组的初始值（可以跨文件）
      const shopListName = [];
      _.forEach(list, (element) => {
        shopListName.push({ name: element.name['zh-CN'], id: _.get(element, '_id') });
      });

      commit(types.PINYIN_SEARCH, shopListName);
      //
    } catch (error) {
      commit(types.SHOW_ALERT, { message: error.message });// 原来log出起来的500，经过包装就是CustomError的新对象
    } finally {
      // 用try catch 主要是为了用finally 最终能将loading去掉
      commit(types.HIDE_LOADING);
    }
  },

  // 发送请求改变 isClosed 的值
  async getClosed({ commit, dispatch }, { id, closed }) {
    commit(types.SHOW_LOADING);
    // console.log('{ id, closed }', { id, closed });

    try {
      await sendgetClosed({ id, closed });
      // console.log('result==>', result);
      //
    } catch (error) {
      console.log(error);
      // commit(types.SHOW_ALERT, { message: error.message });// 原来log出起来的500，经过包装就是CustomError的新对象

      // eslint-disable-next-line no-underscore-dangle
      this._vm.$message(error.message); // vm是 main.js 整个vue实例，只要绑定到vue实例上的都可以拿到
    } finally {
      // 用try catch 主要是为了用finally 最终能将loading去掉

      dispatch('getRestaurant'); // 重新渲染页面
      // commit(types.HIDE_LOADING);
    }
  },

  //* 控制显示operateDialog 显示
  dialogVisible({ commit }, payload) {
    commit(types.DIALOG_VISIBLE, payload);
  },

  //* 存住表格里面每一行的信息 payload
  saveEveryRow({ commit }, payload) {
    const data = _.cloneDeep(payload);
    const array = [];

    _.forEach(data.hours, (element) => {
      // console.log('in');
      const start = moment().startOf('day').add(_.get(element, 'start', 0), 'minutes').toDate();
      const end = moment().startOf('day').add(_.get(element, 'end', 0), 'minutes').toDate();
      array.push([start, end]);
    });

    data.time = array; // 给原来的对象添加 time 的属性，用来做响应式，不然的话，改时间是改不了的
    commit(types.SAVE_EVERY_ROW, data);
  },

  //* 发送请求, 获取tags
  async getTags({ commit }) {
    commit(types.SHOW_LOADING);
    try {
      const result = await sendgetTags();
      // console.log('tags==>', result.list);

      commit(types.SAVE_SHOP_TAGS, result); // 把所有的 tags 放到vuex里面
    } catch (error) {
      commit(types.SHOW_ALERT, { message: error.message });
    } finally {
      commit(types.HIDE_LOADING);
    }
  },

  //* 存住选择的tags
  saveChooseTags({ commit }, payload) {
    const allTags = _.cloneDeep(payload); // 用来clone之后就不会联动的改变
    commit(types.SAVE_CHOOSE_TAGS, allTags);
  },

  addTagsVuex({ commit }, payload) {
    commit(types.ADD_CHOOSE_TAGS, payload);
  },

  //* 输入的值改变后 改变vuex里面的名字
  updateName({ commit, rootState }, { name, lang }) {
    const data = _.cloneDeep(rootState.restaurant.rowData);

    data.name[lang] = name; // 将原来的rowData名字改变了，然后再放到vuex里面
    commit(types.SAVE_EVERY_ROW, data);
  },

  //* 发送请求，修改数据库的商店的信息
  async modifyRestaurant({ commit, rootState, dispatch }) {
    commit(types.SHOW_LOADING);

    try {
      const shopID = _.get(rootState.restaurant.rowData, '_id');

      const shopName = _.get(rootState.restaurant.rowData, 'name');

      const shopTags = _.get(rootState.restaurant, 'chooseTags');

      const oldDayOfWeek = _.get(rootState.restaurant.rowData, 'hours');

      const hours = [];
      const shopOpenTime = rootState.restaurant.rowData.time;
      let start = '';
      let end = '';
      _.forEach(shopOpenTime, (element, index) => {
        start = element[0].getHours() * 60 + element[0].getMinutes();
        end = element[1].getHours() * 60 + element[0].getMinutes();
        hours.push({
          dayOfWeek: oldDayOfWeek[index].dayOfWeek, end, start, type: 'delivery',
        });
      });

      //* 发送请求
      const result = await sendUpdateRest({
        id: shopID, name: shopName, tags: shopTags, hours,
      });

      if (result) {
        dispatch('getRestaurant'); // 成功的话，重新渲染页面
      }
      //
    } catch (error) {
      // eslint-disable-next-line no-underscore-dangle
      this._vm.$message(error.message);
      commit(types.SHOW_ALERT, { message: error.message });// 原来log出起来的500，经过包装就是CustomError的新对象
    } finally {
      // 用try catch 主要是为了用finally 最终能将loading去掉
      commit(types.HIDE_LOADING);
    }
  },
};
